/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
import sun.util.calendar.Gregorian;

/**
 *
 * @author Elisa
 */
public class Buku {

    private String idBuku, judulBuku, pengarang, penerbit;
    private int thnTerbit, jumlah, stok;
    private static Connection conn = DatabaseConnection.getConnection();
    private static String PENGARANG = "[a-zA-Z\\s].*";
    private static String PENERBIT = "[a-zA-Z\\s.]*";
    private static String TAHUN_TERBIT = "[0-2][0-9][0-9][0-9]";

    public Buku() {
    }
//    

    public static Buku[] search(String keyword) throws SQLException, Exception {
        ArrayList<Buku> hasil = new ArrayList<Buku>();

        String sql = "select IDBUKU, JUDULBUKU, PENGARANG, PENERBIT, TAHUNTERBIT, JUMLAH, STOK from BUKU "
                + "where lower(IDBUKU) like lower(?) or "
                + "lower(JUDULBUKU) like lower(?) or "
                + "lower(PENGARANG) like lower(?) or "
                + "lower(PENERBIT) like lower(?) order by IDBUKU asc";

        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, "%" + keyword + "%");
        ps.setString(2, "%" + keyword + "%");
        ps.setString(3, "%" + keyword + "%");
        ps.setString(4, "%" + keyword + "%");
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Buku buku = new Buku();
            buku.setIdBuku(rs.getString(1));
            buku.setJudulBuku(rs.getString(2));
            buku.setPengarang(rs.getString(3));
            buku.setPenerbit(rs.getString(4));
            buku.setThnTerbit(rs.getInt(5));
            buku.setJumlah(rs.getInt(6));
            buku.setStok(rs.getInt(7));
            hasil.add(buku);
        }
        Buku[] buku = new Buku[hasil.size()];
        for (int i = 0; i < buku.length; i++) {
            buku[i] = hasil.get(i);
        }
        return buku;

    }

    public void simpanBukuPrepared() throws SQLException {
        PreparedStatement prepare = null;


        String sql = "insert into buku values (?,?,?,?,?,?,?)";
        prepare = conn.prepareStatement(sql);
        prepare.setString(1, this.idBuku);
        prepare.setString(2, this.judulBuku);
        prepare.setString(3, this.pengarang);
        prepare.setString(4, this.penerbit);
        prepare.setInt(5, this.thnTerbit);
        prepare.setInt(6, this.jumlah);
        prepare.setInt(7, this.stok);

        prepare.executeUpdate();

    }


    public String getIdBuku() {
        return idBuku;
    }

    public void setIdBuku(String idBuku) {
        this.idBuku = idBuku;
    }

    public String getJudulBuku() {
        return judulBuku;
    }

    public void setJudulBuku(String judulBuku) throws Exception {
        if (judulBuku.equals("")) {
            throw new Exception("Judul masih kosong");
        }
        this.judulBuku = judulBuku;

    }

    public String getPengarang() {
        return pengarang;
    }

    public void setPengarang(String pengarang) throws Exception {
        if (pengarang.equals("")) {
            throw new Exception("Pengarang masih kosong");
        }
        if (pengarang.matches(PENGARANG)) {
            this.pengarang = pengarang;
        } else {
            throw new Exception("Nama pengarang hanya terdiri dari huruf");
        }
    }

    public String getPenerbit() {
        return penerbit;
    }

    public void setPenerbit(String penerbit) throws Exception {
        if (penerbit.equals("")) {
            throw new Exception("Penerbit masih kosong");
        }
        if (penerbit.matches(PENERBIT)) {
            this.penerbit = penerbit;
        } else {
            System.out.println(penerbit);
            throw new Exception("Nama penerbit hanya terdiri dari huruf");
        }
    }

    public int getThnTerbit() {
        return thnTerbit;
    }

    public void setThnTerbit(int thnTerbit) throws Exception {
        if (thnTerbit <= new GregorianCalendar().getTime().getYear() + 1900) {
            this.thnTerbit = thnTerbit;
        } else {
            throw new Exception("tahun salah karena melebihi tahun ini");
        }
    }

    public int getJumlah() {
        return jumlah;
    }

    public void setJumlah(int jumlah) {
        this.jumlah = jumlah;
    }

    public int getStok() {
        return stok;
    }

    public void setStok(int stok) {
        this.stok = stok;
    }

    public static Buku Search(String id_buku) throws SQLException {
        PreparedStatement prepare = null;
        String query = "select * from buku where idbuku = ?";
        prepare = conn.prepareStatement(query);
        prepare.setString(1, id_buku);
        ResultSet rSet = prepare.executeQuery();
        if (rSet.next()) {
            Buku buku = new Buku();
            buku.judulBuku = rSet.getString("JUDULBUKU");
            buku.pengarang = rSet.getString("PENGARANG");
            buku.penerbit = rSet.getString("PENERBIT");
            buku.thnTerbit = rSet.getInt("TAHUNTERBIT");
            buku.jumlah = rSet.getInt("JUMLAH");
            buku.stok = rSet.getInt("STOK");
            return buku;
        } else {
            return null;
        }
    }

}
